const nodemailer = require('nodemailer');
const path = require('path');
require('dotenv').config({ path: path.join(__dirname, '../.env') });

// 日志函数
function log(message) {
  const timestamp = new Date().toISOString();
  console.log(`[${timestamp}] ${message}`);
}

// 邮件发送配置
const transporter = nodemailer.createTransport({
  host: process.env.EMAIL_HOST || 'smtp.qq.com',
  port: parseInt(process.env.EMAIL_PORT) || 465,
  secure: process.env.EMAIL_SECURE !== 'false', // 默认为 true
  auth: {
    user: process.env.EMAIL_USER,
    pass: process.env.EMAIL_PASS
  }
});

// 收件人列表
const recipients = process.env.EMAIL_RECIPIENTS 
  ? process.env.EMAIL_RECIPIENTS.split(',').map(email => email.trim())
  : ['573843273@qq.com', '675766596@qq.com'];

// 发送测试邮件
async function sendTestEmail() {
  // 检查邮件配置
  if (!process.env.EMAIL_USER || !process.env.EMAIL_PASS) {
    log('❌ 邮件配置不完整！');
    log('💡 请先复制 config/.env.example 为 .env 并填写正确的邮件配置：');
    log('   cp config/.env.example .env');
    log('   然后编辑 .env 文件，填写你的邮箱和密码');
    log('');
    log('📝 配置说明：');
    log('   EMAIL_USER: 你的发送邮箱（如：your_email@qq.com）');
    log('   EMAIL_PASS: QQ邮箱的授权码（不是登录密码）');
    log('   EMAIL_RECIPIENTS: 接收邮件的邮箱列表');
    return;
  }

  log('🚀 开始邮件发送测试...');
  log(`📧 发送邮箱: ${process.env.EMAIL_USER}`);
  log(`📬 接收邮箱: ${recipients.join(', ')}`);
  
  const timestamp = new Date().toLocaleString('zh-CN', {
    timeZone: 'Asia/Shanghai'
  });

  // 模拟新增交易对数据
  const testNewPairs = ['BTC-TEST1', 'KRW-TEST2', 'USDT-TEST3'];

  const mailOptions = {
    from: process.env.EMAIL_USER,
    to: recipients.join(','),
    subject: `📧 邮件发送测试 - Upbit 交易对监控系统 - ${timestamp}`,
    html: `
      <h2>📧 邮件发送功能测试</h2>
      <p><strong>测试时间：</strong>${timestamp}</p>
      <p><strong>测试目的：</strong>验证 Upbit 交易对监控系统的邮件发送功能</p>
      
      <h3>🧪 模拟新增交易对：</h3>
      <ul>
        ${testNewPairs.map(pair => `<li><code>${pair}</code></li>`).join('')}
      </ul>
      
      <h3>⚙️ 系统配置信息：</h3>
      <ul>
        <li><strong>邮件服务器：</strong>${process.env.EMAIL_HOST || 'smtp.qq.com'}</li>
        <li><strong>端口：</strong>${process.env.EMAIL_PORT || 465}</li>
        <li><strong>发送邮箱：</strong>${process.env.EMAIL_USER}</li>
        <li><strong>接收邮箱数量：</strong>${recipients.length} 个</li>
      </ul>
      
      <hr>
      <p style="color: #28a745; font-weight: bold;">✅ 如果您收到此邮件，说明邮件发送功能正常！</p>
      <p style="color: #666; font-size: 12px;">
        此邮件由 Upbit 交易对监控系统测试脚本发送<br>
        测试完成后，您可以运行主程序开始监控
      </p>
    `,
    text: `
邮件发送功能测试

测试时间：${timestamp}
测试目的：验证 Upbit 交易对监控系统的邮件发送功能

模拟新增交易对：
${testNewPairs.map(pair => `- ${pair}`).join('\n')}

系统配置信息：
- 邮件服务器：${process.env.EMAIL_HOST || 'smtp.qq.com'}
- 端口：${process.env.EMAIL_PORT || 465}
- 发送邮箱：${process.env.EMAIL_USER}
- 接收邮箱数量：${recipients.length} 个

✅ 如果您收到此邮件，说明邮件发送功能正常！

此邮件由 Upbit 交易对监控系统测试脚本发送
测试完成后，您可以运行主程序开始监控
    `
  };

  try {
    // 验证邮件配置
    log('🔍 验证邮件服务器连接...');
    await transporter.verify();
    log('✅ 邮件服务器连接验证成功');
    
    // 发送测试邮件
    log('📤 正在发送测试邮件...');
    const info = await transporter.sendMail(mailOptions);
    
    log(`✅ 测试邮件发送成功！`);
    log(`📧 邮件ID: ${info.messageId}`);
    log(`📬 发送到: ${recipients.join(', ')}`);
    log('');
    log('🎉 邮件发送功能测试完成！');
    log('💡 现在可以运行主程序开始监控：npm start');
    
  } catch (error) {
    log(`❌ 测试邮件发送失败: ${error.message}`);
    log('');
    log('🔧 可能的解决方案：');
    
    if (error.code === 'EAUTH') {
      log('   1. 检查邮箱和密码是否正确');
      log('   2. 如果使用QQ邮箱，确保使用的是授权码而不是登录密码');
      log('   3. 确保已开启SMTP服务');
    } else if (error.code === 'ESOCKET') {
      log('   1. 检查网络连接');
      log('   2. 检查邮件服务器地址和端口');
      log('   3. 尝试关闭防火墙或VPN');
    } else {
      log('   1. 检查 .env 文件配置是否正确');
      log('   2. 检查邮箱服务商的SMTP设置');
      log('   3. 查看具体错误信息进行排查');
    }
  }
}

// 主函数
async function main() {
  log('📧 Upbit 交易对监控系统 - 邮件发送测试');
  log('=' .repeat(50));
  
  await sendTestEmail();
  
  log('=' .repeat(50));
  log('🏁 测试程序结束');
}

// 启动测试
main().catch(error => {
  log(`💥 测试程序异常: ${error.message}`);
  process.exit(1);
});
